package com.igeek.boot.config;

import com.igeek.boot.entity.Car;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author fengqq
 * @Description 底层注解-@Conditional条件装配
 *              条件装配：满足Conditional指定的条件，则进行组件注入
 * @Date 2024/8/13  16:22
 *
 * @Conditional条件装配:
 * @ConditionalOnxxx  一旦有指定的配置，就会生效如下的配置
 * @ConditionalOnMissingxxx  一旦没有指定的配置，就会生效如下的配置
 *
 * 例如：
 * @ConditionalOnClass
 * @ConditionalOnWebApplication
 * @ConditionalOnBean
 * @ConditionalOnMissingBean
 * @ConditionalOnMissingClass
 *
 */
//若 没有在ioc容器中 匹配到car类型的实例 则生效配置类MyConfig3
//@ConditionalOnMissingBean(Car.class)
@Configuration
public class MyConfig3 {

    //若在ioc容器中 匹配到car类型的实例 则将c1的bean实例注册到ioc中
    //@ConditionalOnBean(Car.class)

    //若 没有在ioc容器中 匹配到car类型的实例 则将c1的bean实例注册到ioc中
    //@ConditionalOnMissingBean(Car.class)

    //若 没有在ioc容器中 匹配到car类型(类名)的实例  则将c1的bean实例注册到ioc中
    @ConditionalOnMissingClass("com.igeek.boot.entity.Car")
    @Bean
    public Car c1(){
        return new Car("奔驰",2000000);
    }
}
